package com.babel.util.tools;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DebtCodeTools {

	 /** 
     * 锁对象，可以为任意对象 
     */  
    private static Object lockObj = "lockerOrder";  
    /** 
     * 订单号生成计数器 
     */  
    private static long orderNumCount = 0L;  
    /** 
     * 每秒生成订单号数量最大值 
     */  
    private static int maxPerMSECSize=10000;  
    public static String makeOrderNum() {  
        try {  
            // 最终生成的订单号  
            String finOrderNum = "";  
            synchronized (lockObj) {  
                // 取系统当前时间作为订单号变量前半部分，精确到毫秒  
                long nowLong = Long.parseLong(new SimpleDateFormat("yyMMddHHmmss").format(new Date()));  
                // 计数器到最大值归零，可扩展更大，目前1毫秒处理峰值1000个，1秒100万  
                if (orderNumCount >= (maxPerMSECSize-1)) {  
                    orderNumCount = 0L;  
                }  
                //组装订单号  
//              String countStr=maxPerMSECSize +orderNumCount+"";  
//              finOrderNum="ZBD"+nowLong+countStr.substring(1);
                String countStr = String.format("%04d", orderNumCount); 
                finOrderNum="ZBD"+nowLong+countStr;  
                orderNumCount++;  
//                System.out.println(finOrderNum + "--" + Thread.currentThread().getName() + "::" + tname );  
                // Thread.sleep(1000); 
                System.out.println(finOrderNum+"--");
                return finOrderNum;
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
            return null;
        }  
    }  
  
    public static void main(String[] args) {  
        try {  
            for (int i = 0; i < 200; i++) {  
                Thread t1 = new Thread(new Runnable() {  
                    public void run() {  
                    	DebtCodeTools.makeOrderNum();
                    }  
                }, "at" + i);  
                t1.start();  
  
                Thread t2 = new Thread(new Runnable() {  
                    public void run() {  
                    	DebtCodeTools.makeOrderNum();
                    }  
                }, "bt" + i);  
                t2.start();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
  
    }  
	
}
